#BeautifulSoup: 面向对象的形式：性能较差:易用性更好
#xPath:基于正则表达式：性能较好： 对初学者不太友好(各个标签、特性)
# 安装Bs4 ：pip install bs4 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 依赖： pip install lxml -i https://pypi.tuna.tsinghua.edu.cn/simple
# bs4：解析response、解析html本地文件
#第一步： 创建一个bs4对象
from bs4 import BeautifulSoup
soup=BeautifulSoup(open('111.html',encoding='utf-8'),'lxml')
#第二步：解析: 第一个符合的标签
print(soup.a)  #输出页面的元素节点
print(soup.a.attrs) # 查询所有的属性，以字典形式返回
# 常见的bs4的函数 find() 查找函数
print(soup.find('a',id='a1'))
print(soup.find('a',class_='a2'))
#查找全部数据find_all()
print(soup.find_all('a'))
print(soup.find_all(['a','span']))
print(soup.find_all(['a','span'],limit=3))
#查询到了元素，想拿到里面的内容
print(soup.find('a',id='a1').get_text())
print(soup.find('a',id='a1').get("href"))
#练习： 拿到页面中，"徐向宇"这三个字，5分钟！
print(soup.find('li',id='i4').get_text())
print("--------------------------------")

#更加常用的函数 select() ：css的选择器
print(soup.select("div"))  #标签选择器
slist=soup.select("#div2")#id选择器
print(type(slist))
print(len(slist))
print(soup.select(".classp1"))#类选择器

#筛选属性
print(soup.select("li[id]"))
print(soup.select("li[id='i1']"))

#复杂关系胡选择器：后代选择器  子代选择器
print(soup.select("div li"))
print(soup.select("div>li"))
#练习： 筛选出：皮成勇 范友 刘佳文 徐向宇 王跃鹏 5分钟
slist=soup.select("ul li")
for item in slist:
    print(item.get_text())

#获取节点的属性 get()方法获取
i5=soup.select("#i5")[0]
print(i5.attrs.get("class"))
print(i5.get("class"))
print(i5["class"])
